package Day_0203.Mybatis;

/**
 * @author zxc
 * @date 2023/02/03 16:54
 **/
public class Entity_Class_Attribute_unconsistency {
    public static void main(String[] args) {
        /**
         * 实体类属性名和表中字段名不一致
         * ===》
         * （1）第1种：
         *  通过在查询的sql语句中定义字段名的别名，让字段名的别名和实体类的属性名一致。
         *
         * （2）第2种：
         *  通过来映射字段名和实体类属性名的一一对应的关系。
         */

        // 即，在查询sql语句中定义字段名的别名;（使得数据库中字段名与实体类中属性名一一对应;）
//        <select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”>
//          select order_id id,
//                 order_no orderno ,
//                 order_price price
//                 form orders where order_id=#{id};
//        </select>


//         <select id="getOrder" parameterType="int" resultMap="orderresultmap">
//                select * from orders where order_id=#{id}
//         </select>
        // 即，映射数据库中字段名到实体类属性名;
        // 即，定义resultMap来是实现字段和属性之间的相互映射;
//         <resultMap type=”me.gacl.domain.order” id=”orderresultmap”>
//         <!–用id属性来映射主键字段–>
//         <id property=”id” column=”order_id”>
//         <!–用result属性来映射非主键字段，property为实体类属性名，column为数据表中的属性–>
//         <result property = “orderno” column =”order_no”/>
//         <result property=”price” column=”order_price” />
//         </reslutMap>


        /**
         * #{}和${}之间的区别
         * ===》
         * 1.#{}是预编译处理，${}是字符串替换。
         * 2.Mybatis在处理#{}时，会将sql中的#{}替换为?号，调用PreparedStatement的set方法来赋值；
         * 3.Mybatis在处理${}时，就是把${}替换成变量的值。
         * 4.使用#{}可以有效的防止SQL注入，提高系统安全性。
         * ===》
         * 总结 ：
         * （1）#{}，是预编译处理;（实质上，会将sql语句中#{}替换成？;）
         *  ===> 能够有效地避免sql注入;
         * （2）${},是字符串替换;（实质上，会将sql语句中${}替换为 字符串;）
         *  ===> 很大程度上，会出现sql注入问题;
         *
         */
    }
}
